import io.swagger.annotations.Example;

import java.util.ArrayList;
import java.util.List;

/**
 *实例类，包含三个属性、两个构造方法、三个普通方法、并使用if，for，String处理，异常处理
 *
 */
public class Core_code {

    /**
     * 属性1：名称
     */
    private String name;

    /**
     * 属性2：年龄
     */
    private int age;

    /**
     * 属性3：描述列表
     */
    private List<String> descriptions;

    /**
     * 默认构造方法
     */
    public Core_code() {
        this.name = "默认名称";
        this.age = 0;
        this.descriptions = new ArrayList<>();
    }

    /**
     * 带参数构造方法
     *
     * @param name  名称
     * @param age   年龄
     * @param descs 描述列表
     */
    public Core_code(String name, int age, List<String> descs) {
        if (name == null || name.isEmpty()) {
            throw new IllegalArgumentException("名称不能为空");
        }
        if (age < 0) {
            throw new IllegalArgumentException("年龄不能是负数");
        }
        this.name = name;
        this.age = age;
        this.descriptions = (descs != null) ? new ArrayList<>(descs) : new ArrayList<>();
    }

    /**
     * 获取名称的方法
     *
     * @return 名称
     */
    public String getName() {
        return name;
    }

    /**
     * 设置名称的方法
     *
     * @param name 名称
     */
    public void setName(String name) {
        if (name == null || name.isEmpty()) {
            throw new IllegalArgumentException("名称不能为空");
        }
        this.name = name;
    }

    /**
     * 添加描述的方法
     *
     * @param description 描述
     */
    public void addDescription(String description) {
        if (description == null || description.isEmpty()) {
            throw new IllegalArgumentException("描述不能为空");
        }
        descriptions.add(description);
    }

    /**
     * 获取描述列表的方法，并去除空字符串
     *
     * @return 描述列表
     */
    public List<String> getDescriptions() {
        List<String> filteredDescs = new ArrayList<>();
        for (String desc : descriptions) {
            if (desc != null && !desc.isEmpty()) {
                filteredDescs.add(desc);
            }
        }
        return filteredDescs;
    }

    /**
     * 打印所有描述的方法，如果描述列表为空，则打印提示信息
     */
    public void printDescriptions() {
        if (descriptions.isEmpty()) {
            System.out.println("没有描述信息。");
        } else {
            for (String desc : descriptions) {
                System.out.println(desc);
            }
        }
    }

    /**
     * 示例方法，对字符串进行处理并抛出异常
     *
     * @param input 输入字符串
     * @return 处理后的字符串
     * @throws IllegalArgumentException 如果输入字符串为空或仅包含空白字符
     */
    public String processString(String input) throws IllegalArgumentException {
        if (input == null || input.trim().isEmpty()) {
            throw new IllegalArgumentException("输入字符串不能为空或仅包含空白字符");
        }
        // 对字符串进行简单处理，例如转换为大写
        return input.toUpperCase();
    }

    /**
     * 示例方法，模拟可能抛出异常的操作
     *
     * @param flag 标志位，用于模拟异常抛出
     */
    public void simulateException(boolean flag) {
        try {
            if (flag) {
                throw new RuntimeException("模拟异常抛出");
            }
            System.out.println("没有抛出异常。");
        } catch (RuntimeException e) {
            System.err.println("捕获到异常：" + e.getMessage());
        }
    }

    // 主方法，用于测试
    public static void main(String[] args) {
        try {
            Core_code example = new Core_code("张三", 20, new ArrayList<String>() {{
                add("描述1");
                add("描述2");
            }});
            example.addDescription("描述3");
            example.printDescriptions();

            String processedString = example.processString("  hello  ");
            System.out.println("处理后的字符串：" + processedString);

            example.simulateException(true);
            example.simulateException(false);

        } catch (IllegalArgumentException e) {
            System.err.println("输入参数错误：" + e.getMessage());
        }
    }
}

